package com.qcby.teacher.config;

import okhttp3.*;
import org.json.JSONException;
import org.json.JSONObject;

import java.io.IOException;
import java.util.concurrent.TimeUnit;

public class TeachSample1 {
    // 密钥
    public static final String API_KEY = "8CRtKFmxkB6QIW3vliw3scWB";
    public static final String SECRET_KEY = "1eKkyLh1txdkf3o3ytgvM6RsN5THafCe";
    // OkHttpClient 配置，设置连接超时和读取超时
    static final OkHttpClient HTTP_CLIENT = new OkHttpClient().newBuilder()
            .connectTimeout(60, TimeUnit.SECONDS) // 设置连接超时为60秒
            .readTimeout(60, TimeUnit.SECONDS) // 设置读取超时为60秒
            .build();

    public String wenxin(String question) throws IOException {
        {
            // 定义请求的媒体类型
            MediaType mediaType = MediaType.parse("application/json");
            // 构建请求体，消息内容包含了用户请求
            RequestBody body = RequestBody.create(mediaType, "{\n" +
                    "    \"messages\": [\n" +
                    "        {\"role\": \"user\", \"content\": \"" + question + "\"}\n" +
                    "    ],\n" +
                    "    \"temperature\": 0.95,\n" +
                    "    \"top_p\": 0.8,\n" +
                    "    \"penalty_score\": 1,\n" +
                    "    \"enable_system_memory\": false,\n" +
                    "    \"disable_search\": false,\n" +
                    "    \"enable_citation\": false\n" +
                    "}");
            // 构建 HTTP 请求
            Request request = new Request.Builder()
                    .url("https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/completions_pro?access_token=" + getAccessToken())
                    .method("POST", body) // 设置请求方法为 POST
                    .addHeader("Content-Type", "application/json") // 设置请求头，表示发送的内容是 JSON 格式
                    .build();
            String answer = null;
            // 发送请求并获取响应
            try (Response response = HTTP_CLIENT.newCall(request).execute()) {
                answer = response.body().string();
                // 输出响应内容，打印接口返回的数据
                System.out.println(answer);
            } catch (IOException e) {
                // 捕获 IO 异常（如网络错误、超时等），并打印异常信息
                e.printStackTrace();
            }
            return answer;
        }
    }

    /**
     * 从用户的 API 密钥（AK、SK）生成鉴权签名（Access Token）
     *
     * @return 鉴权签名（Access Token）
     * @throws IOException  如果发生 I/O 异常
     * @throws JSONException 如果发生 JSON 解析异常
     */
    public String getAccessToken() throws IOException, JSONException {
        // 设置请求体的媒体类型为 x-www-form-urlencoded
        MediaType mediaType = MediaType.parse("application/x-www-form-urlencoded");
        // 创建请求体，包含 API 的 client_id 和 client_secret
        RequestBody body = RequestBody.create(mediaType, "grant_type=client_credentials&client_id="
                + API_KEY
                + "&client_secret=" + SECRET_KEY);
        // 构建请求，使用 POST 方法获取 Access Token
        Request request = new Request.Builder()
                .url("https://aip.baidubce.com/oauth/2.0/token") // 请求 URL，获取 Access Token
                .method("POST", body) // 使用 POST 方法发送请求
                .addHeader("Content-Type", "application/x-www-form-urlencoded") // 请求头
                .build();
        // 发送请求并获取响应
        try (Response response = HTTP_CLIENT.newCall(request).execute()) {
            // 从响应中解析出 Access Token
            return new JSONObject(response.body().string()).getString("access_token");
        }
    }
}